草庐IT

CountDownLatch和ExecutorService 线程池cachedThreadPool.submit

全部标签

java - 如何在并发线程中操作 "ConcurrentModificationException"和 `values()` 时避免 HashMap `put()`?

代码:我有一个哈希表privateMapmap=newHashMap();一种方法通过调用put(K,V)将K-V对放入其中。另一种方法想要从它的值中提取一组随机元素:intsize=map.size();//size>0V[]value_array=map.values().toArray(newV[size]);Randomrand=newRandom();intstart=rand.nextInt(size);intend=rand.nextInt(size);//returnvalue_array[start..end-1]这两个方法在两个不同的并发线程中被调用。错误:我遇到了

java - 使用JSch使用多线程下载文件

我正在尝试使用多线程从远程服务器下载多个文件。但是,当我使用多个线程时,我得到了java.lang.IOException:Pipesclosed.当我只使用一个线程时,相同的代码工作正常。难道不能使用JSch从同一个远程服务器同时下载多个文件吗?SftpTest.javapublicclassSftpTest{privatestaticListaccessorList=newArrayList();privatestaticListfiles=newArrayList();privatestaticExecutorServicewriterThreadPool=Executors.n

java - Guava:MemoizingSupplier 线程安全

GuavaSuppliers类包含MemoizingSupplier:staticclassMemoizingSupplierimplementsSupplier,Serializable{finalSupplierdelegate;transientvolatilebooleaninitialized;//"value"doesnotneedtobevolatile;visibilitypiggy-backs//onvolatilereadof"initialized".transientTvalue;MemoizingSupplier(Supplierdelegate){this.

java - 有序列表和类线程安全

我有一个类有:2个字段,其中包含按时间排序的列表(list1、list2)。3个只读方法,迭代上面的列表生成汇总统计数据。1变异方法,它在list1中寻找给定“新项目”的匹配项。如果找不到匹配项,它会将“new-item”添加到list1。如果找到匹配项,它会从list1中删除匹配项并将匹配项和“new-item”添加到list2。让我们假设所有方法的多个并发调用是可能的。我需要在最大化性能的同时实现线程安全。方法1(非常慢)-将字段类型声明为ArrayList并在所有方法上使用同步关键字。方法2-将字段类型声明为CopyOnWriteArrayList并同步变异方法。问题方法2是否确

java - 多个 newSingleThreadExecutor 与 ExecutorService 的 newFixedThreadPool

在我的应用程序中,我有4个不同的进程,它们永久运行,中间有一些小的停顿。当前版本的代码在单独的老式线程中执行每个进程:ThreadnlpAnalyzer=newThread(()->{//infinelopforautorestoreincaseofcrash//noinspectionInfiniteLoopStatementwhile(true){try{//thismethodshouldrunpermanently,pausesimplementedinternallyNLPAnalyzer.analyzeNLP(dbCollection);}catch(Exceptione)

java - 如果从 2 个线程写入 volatile 变量会怎样?

考虑Java并发实践中的片段-@ThreadSafepublicclassSynchronizedInteger{@GuardedBy("this")privateintvalue;publicsynchronizedintgetValue(){returnvalue;}publicsynchronizedvoidsetValue(intvalue){this.value=value;}}同一本书的摘录-AgoodwaytothinkaboutvolatilevariablesistoimaginethattheybehaveroughlyliketheSynchronizedInte

Java AsynchronousFileChannel - 线程使用

我理解Java的AsynchronousFileChannel是一个异步api(不阻塞调用线程)并且可以使用系统线程池中的线程。我的问题是:AsynchronousFileChannel操作是否具有1:1的线程比率?换句话说,如果一个循环使用AsynchronousFileChannel读取100个文件,它会使用100个线程来执行此操作还是仅使用少量线程(以标准NIO方式)? 最佳答案 一般使用的AsynchronousFileChannel实现(例如在Linux上实际使用)是SimpleAsynchronousFileChanne

java - Spring @ExceptionHandler 和多线程

我有以下Controller建议:@ControllerAdvicepublicclassExceptionHandlerAdvice{@ExceptionHandler(NotCachedException.class)@ResponseStatus(HttpStatus.BAD_REQUEST)publicModelAndViewhandleNotCachedException(NotCachedExceptionex){LOGGER.warn("NotCachedException:",ex);returngenerateModelViewError(ex.getMessage(

java - ObjectMapper - 线程安全和性能的最佳实践

总结我想在下面描述的用例的上下文中找到在线程安全和性能方面使用ObjectMapper和/或ObjectReader的最佳实践。背景我有一个辅助类(Json.java),其中方法toObject()使用ObjectMapper从json转换字符串到给定(json可映射)类的对象。问题/疑问我读到,ObjectReader通常被推荐为完全线程安全的,但我主要看到它处于非泛型上下文中,其中预定义了要读取的类。在这种情况下,您认为在线程安全和性能方面的最佳实践是什么?在代码中,我提出了三个可以作为起点的建议。我已尝试查看jackson-databind的源代码和文档,但我的Java理论技能还

java - Thread.yield() 之后线程的 Thread.State 是什么?

Thread.yield()之后线程的Thread.State是什么?它是Thread.State.WAITING吗?谢谢。 最佳答案 不,线程仍将在RUNNABLE中状态。请注意,RUNNABLE表示线程可以运行,并且可能正在运行或正在等待轮到它。Thread.STATE不区分当前正在执行的线程和准备运行的线程,它们都是RUNNABLE。一个线程只会进入WAITING调用wait()、join()或LockSupport.park()时的状态。调用Thread.yield()当前运行的线程自愿放弃其CPU时间片的方法。然后该线程从